//假设有n项作业位于就绪队列中，这些作业的提交时间用数组requestTimes
//按照提交时间的先后顺序存储，对应的作业服务时间（持续时间）用数组durations存储。
//采用SJF算法，计算n项作业的平均等待时间。
//当存在多个相同长度的短作业时，按照提交时间的先后顺序进行调度。
//假设0<= n <= 100。求出所有作业的平均等待时间。
// void minWaitingTime(int requestTimes[],int durations[],int n)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 0x7FFFFFFF
void minWaitingTime(int requestTimes[], int durations[], int n) {
  int i, time, j, k;
  float res;
  int index, arriveTime, indextemp;
  int *done = (int *)malloc(sizeof(int) *
                            n);  //表示作业是否执行过,1表示执行完毕,0表示未执行
  int *wait = (int *)malloc(sizeof(int) * n);  //表示等待时间
  for (i = 0; i < n; ++i) {
    wait[i] = 0;
    done[i] = 0;
  }
  time = 0;  // time表示总作业执行时间
  for (i = 0; i < n; i++) {
    if (i == 0) {  //执行第一个作业
      time += durations[i];
      done[i] = 1;
      for (j = 1; j < n; j++) {
        if (requestTimes[j] < time) wait[j] = time - requestTimes[j];
      }
    } else {
      index = GetMin(durations, done, n);
      //判断是否有多个最短作业,如有选择其中先到达的
      arriveTime = requestTimes[index];
      for (indextemp = index + 1; indextemp < n; indextemp++) {
        if (done[indextemp] == 0 && durations[indextemp] == durations[index] &&
            requestTimes[indextemp] < arriveTime)
          index = indextemp;
      }
      time += durations[index];
      done[index] = 1;
      //执行选出的最短作业，并更新其它作业的等待时间
      for (indextemp = 0; indextemp < n && i < n - 1; indextemp++)
        if (done[indextemp] == 0 && requestTimes[indextemp] < time)
          wait[indextemp] = time - requestTimes[indextemp];
    }
  }
  res = 0.0;
  for (i = 0; i < n; i++) res += wait[i];
  printf("%f\n", res / n);
}
//每次取出服务时间最短且示执行过的作业
int GetMin(int durations[], int done[], int n) {
  int i, j, min = MAX;
  for (i = 0; i < n; i++)
    if (durations[i] < min && done[i] == 0) {
      min = durations[i];
      j = i;
    }
  return j;
}
int main() {
  int requestTimes[100];
  int durations[100];
  int i, n;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d", &requestTimes[i]);
  for (i = 0; i < n; i++) scanf("%d", &durations[i]);
  minWaitingTime(requestTimes, durations, n);
  system("pause");
  return 0;
}